Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~
在本系列文會利用目前 Visual Studio 內建的專案樣本建立一個初始的 .NET MAUI 專案,並且透過此 .NET MAUI 專案來把 TopStore App 的開發從 Xamairn.Forms 轉換到 .NET MAUI 上進行。
本篇是 Re: 從零改成用 .NET MAUI 技術來繼續過去用 Xamarin 開發的一個 App : TopStore 系列 系列文的 EP17。
稍微來整理一下目前的整個專案的程式碼,也把 TopStoreApp 當中的程式碼都改成 C# 10.0 與 .NET 6.0 所加入的新風格設計: "File Scoped Namespaces" 與 "ImplicitUsings"。
就以目前的 TopStoreApp 在從 Xamarin.Forms 移轉成 .NET MAUI 的過程當中,從未被異動過的程式碼檔 "IDataService.cs" 來看:
其中,如果有注意到,上方的 Namespace 都會被 Visual Studio 2022 判定為不用撰寫的 "命名空間":
在 TopStoreApp 的專案右鍵選單上點選 "編輯專案檔":
因為在 TopStoreApp 的專案專案檔上,按照微軟定義的 "ImplicitUsings" 寫法:
<Project Sdk="Microsoft.NET.Sdk">
與
<ImplicitUsings>enable</ImplicitUsings>
所以,在此 TopStoreApp 專案使用到設計在 "Microsoft.NET.Sdk" 中所規劃設計到的這些 Namespace 們:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
都不需要在專案程式碼當中,去額外撰寫引用 "命名空間" 的敘述,專案會直接自動推斷引用,而如果要關閉推斷引用也可以把專案檔當中的設定改成如下:
<ImplicitUsings>disable</ImplicitUsings>
而如果在所撰寫的程式當中,某個命名空間(以 System.Net.Http 這個命名空間來說),真的都不需要去使用到此命名空間底下的類別設計,但卻又想留著 "推斷引用",也可以保持專案檔的 "推斷引用" 設定是 "enable",然後再額外增加如下設定即可:
<ItemGroup>
<Using Remove="System.Net.Http" />
</ItemGroup>
因此,這段程式碼將要移除(下圖藍框所示):
移除後的結果如下:
再來就是會觀察到,從一開始的 .NET 所設計 C# 類別程式碼的設計外面,通常都會再包一個 "命名空間" 的撰寫(下圖紅框所示):
而如果一個 .cs 檔案當中只有一個命名空間的設計時,那現在在 C# 10.0 之後可以透過 "File Scoped Namespaces" 改成這樣撰寫:
如果是在 "Visual Studio 2022" 要改成使用 "File Scoped Namespaces" 的話,可以直接在命名空間後面打上 ";",Visual Studio 2022 就會自動幫忙把大括號去除,並且把程式碼的排版排好:
所以按照這兩點調整完個專案的程式碼。最後,也把之前 EP 的介紹當中因解釋過程而註解掉,那些用不到的程式碼也都移除了。
完成後,也能執行測試看看,所有在 TopStoreApp 已完成的功能都能正常運作沒問題唷!
本 EP 介紹所完成的範例程式碼可在此下載。
其他參考資料:
C# 10.0: File Scoped Namespaces – Get More Space For Your Code:
https://www.thomasclaudiushuber.com/2021/09/21/c-10-file-scoped-namespaces/
Announcing .NET 6 Release Candidate 2:
https://devblogs.microsoft.com/dotnet/announcing-net-6-release-candidate-2/#net-sdk-c-project-templates-modernized